package daily.may0514;

import java.util.HashSet;

public class WhyHashSetNoRepeatTest {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        String s1 = new String("abc");
        String s2 = new String("abc");
        //add方法会调用s1的hashCode方法，计算"abc"的哈希值是96354
        //然后在集合中查找有没有哈希值是96354的元素，发现没有
        //于是将s1存储在集合中
        set.add(s1);
        //add方法会调用s2的hashCode方法，计算"abc"的哈希值是96354
        //然后在集合中查找有没有哈希值是96354的元素，发现有s1和他一样（哈希冲突）
        //接下来s2调用equals方法和和哈希值相同的元素比较，s2.equals(s1)，返回true
        //于是不会把s2存储在集合中
        set.add(s2);
        //add方法会调用"重地"的hashCode方法，计算"重地"的哈希值是1179395
        //然后在集合中查找有没有哈希值是1179395的元素，发现没有
        //于是将"重地"存储在集合中
        set.add("重地");
        //add方法会调用"通话"的hashCode方法，计算"通话"的哈希值是1179395
        //然后在集合中查找有没有哈希值是96354的元素，发现有"重地"和他一样（哈希冲突）
        //接下来"通话"调用equals方法和和哈希值相同的元素比较，"通话".equals("重地")，返回false
        //于是将"通话"存储在集合中
        set.add("通话");
        //同理，"abc"不会被存储
        set.add("abc");
        System.out.println(set);//[重地, 通话, abc]
    }
}
